import type { MenuMeta, SidebarMenu } from '@/types/router'

interface AuthState {
  permissionList: string[]
  recursiveMenuList: SidebarMenu[]
  menuMetaMap: Map<string, MenuMeta>
}

const authStore = defineStore('auth', {
  // 存储数据state
  state: (): AuthState => {
    return {
      // 权限列表
      permissionList: [],
      // 路由菜单列表
      recursiveMenuList: [],
      // 菜单元数据
      menuMetaMap: new Map(),
    }
  },
  // 该函数没有上下文数据，所以获取state中的变量需要使用this
  actions: {
    // 设置权限列表
    setPermissionList(list: string[]) {
      this.permissionList = list
    },
    // 设置路由菜单列表
    setRecursiveMenuList(list: SidebarMenu[]) {
      this.recursiveMenuList = list
    },
    // 设置菜单元数据
    setMenuMetaMap(map: Map<string, MenuMeta>) {
      this.menuMetaMap = map
    },
  },
  // 计算属性，和vuex是使用一样，getters里面不是方法，是计算返回的结果值
  getters: {
    // 获取权限列表
    getPermissionList: (state) => {
      return state.permissionList
    },
    // 获取路由菜单列表
    getRecursiveMenuList: (state) => {
      return state.recursiveMenuList
    },
    // 获取菜单元数据
    getMenuMetaMap: (state) => {
      return state.menuMetaMap
    },
  },
})

// 对外暴露方法
export default authStore
